﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;
using System.Data.SqlClient;
using Modelo;

namespace BaseDatos
{
    public class BDEmpleado
    {
        private static string conexionCentral = "Data Source=.\\sqlexpress; Initial Catalog=FarmaciaAurora; Integrated Security=true";
        private static string conexionSucursal1 = "Data Source=.\\sqlexpress; Initial Catalog=FarmaciaAuroraSucursal; Integrated Security=true";
        private static string conexionSucursal2 = "Data Source=.\\sqlexpress; Initial Catalog=FarmaciaAuroraSucursal2; Integrated Security=true";
        public static void InsertarEmpleado(Empleado empleado)
        {
            try
            {
                InsertarEmpleado(empleado, conexionCentral);
                InsertarEmpleado(empleado, conexionSucursal1);
                InsertarEmpleado(empleado, conexionSucursal2);
            }
            catch (Exception)
            {
                throw;
            }
        }
        private static void InsertarEmpleado(Empleado empleado,string conexion)
        {
            if (empleado != null)
            {
                try
                {
                    SqlConnection canal = new SqlConnection(conexion);
                    SqlCommand comando = canal.CreateCommand();
                    comando.CommandText = "Insert into Empleado(Ci,Nombre,ApPaterno,ApMaterno,Direccion,Telefono,Celular,Email) Values (@ci,@nombre,@apPaterno,@apMaterno,@direccion,@telefono,@celular,@email)";
                    comando.Parameters.AddWithValue("ci", empleado.Ci);
                    comando.Parameters.AddWithValue("nombre", empleado.Nombre);
                    comando.Parameters.AddWithValue("apPaterno", empleado.ApellidoPaterno);
                    comando.Parameters.AddWithValue("apMaterno", empleado.ApellidoMaterno);
                    comando.Parameters.AddWithValue("direccion", empleado.Direccion);
                    comando.Parameters.AddWithValue("telefono", empleado.Telefono);
                    comando.Parameters.AddWithValue("celular", empleado.Celular);
                    comando.Parameters.AddWithValue("email", empleado.Email);
                    canal.Open();
                    comando.ExecuteNonQuery();
                }
                catch (Exception)
                {

                    throw;
                }
            }
        }
        public static List<long> CiEmpleados(string nombre, string apellido)
        {
            SqlConnection sql = null;
            List<long> ci = new List<long>();
            try
            {
                sql = new SqlConnection(conexionCentral);
                SqlCommand comando = sql.CreateCommand();
                comando.CommandText = "Select Ci From Empleado where Nombre LIKE '%' + @nom + '%' and ApPaterno LIKE '%' + @ape + '%'";
                comando.Parameters.AddWithValue("nom", nombre);
                comando.Parameters.AddWithValue("ape", apellido);
                sql.Open();
                SqlDataReader reader = comando.ExecuteReader();
                while (reader.Read())
                {
                    long Ci = Convert.ToInt64(reader["Ci"]);
                    ci.Add(Ci);
                }

            }
            catch (Exception)
            {
                throw new Exception("Excepcion no esperada consulte con el administrador");
            }
            finally
            {
                if (sql != null)
                    sql.Dispose();
            }
            return ci;
        
        }
        public static List<Empleado> DevolverTodos()
        {
            try
            {
                SqlConnection canal = new SqlConnection(conexionCentral);
                SqlCommand comando = canal.CreateCommand();
                comando.CommandText = "SELECT * FROM [Empleado]";
                canal.Open();
                SqlDataReader reader = comando.ExecuteReader();
                if (!reader.HasRows)
                {
                    return null;
                }
                List<Empleado> list = new List<Empleado>();
                while (reader.Read())
                {
                    Empleado empleado = new Empleado();
                    empleado.Ci = Int64.Parse(reader["Ci"].ToString());
                    empleado.Nombre=reader["Nombre"].ToString();
                    empleado.ApellidoPaterno= reader["ApPaterno"].ToString();
                    empleado.ApellidoMaterno = reader["ApMaterno"].ToString();
                    empleado.Direccion = reader["Direccion"].ToString();
                    empleado.Telefono = Int64.Parse(reader["Telefono"].ToString());
                    empleado.Celular = Int64.Parse(reader["Celular"].ToString());
                    empleado.Email = reader["Email"].ToString();
                    list.Add(empleado);

                }
                return list;
            }
            catch (Exception)
            {

                throw;
            }
        }
        public static EmpleadoSalario BuscarEmpleado(long ci)
        {
            SqlConnection sql = null;
            EmpleadoSalario empleado = null;
            try
            {
                sql = new SqlConnection(conexionCentral);
                SqlCommand comando = sql.CreateCommand();
                comando.CommandText = "Select E.Ci,Nombre,ApPaterno,NombreDeUsuario,C.Cargo,Salario From [Empleado] as E,[Usuario] as U,[Cargo] as C where E.Ci=@ci and E.Ci=U.Ci and U.IdCargo=C.IdCargo And C.Activo='True'";
                comando.Parameters.AddWithValue("ci", ci);
                sql.Open();
                SqlDataReader reader = comando.ExecuteReader();
               
               
                if(reader.Read())
                {
                    empleado = new EmpleadoSalario();
                    empleado.Ci = reader["Ci"].ToString();
                    empleado.Nombre = reader["Nombre"].ToString();
                    empleado.Apellido = reader["ApPaterno"].ToString();
                    empleado.Cargo = reader["Cargo"].ToString();
                    empleado.Salario = float.Parse(reader["Salario"].ToString());
                    empleado.Usuario = reader["NombreDeUsuario"].ToString();
                }
                
            }
            catch (Exception)
            {
                throw new Exception("Excepcion no esperada consulte con el administrador");
            }
            finally
            {
                if (sql != null)
                    sql.Dispose();
            }
            return empleado;
        }
        
    }
}
